<?php
/*
 * @Author: 李志刚
 * @CopyRight: 2022-2099 李志刚（854378082@qq.com）
 * @Date: 2020-09-20 20:56:00
 * @Description: curl请求类
 * @LastEditors: 李志刚
 * @LastEditTime: 2022-04-21 15:10:09
 * @FilePath: /CoinCMF/app/Customize/Curl.php
 */

namespace App\Customize;

class Curl
{
    // 请求接口用的CURL功能
	public static function postCurl($url, $body, $type = "POST", $json = 0) {
		$header = array();
		//1.创建一个curl资源
		$ch = curl_init();
		//2.设置URL和相应的选项
		curl_setopt($ch, CURLOPT_URL, $url); //设置url
		//1)设置请求头
		if ($json) {
			array_push($header, 'Content-Type:application/json');
		} else {
			array_push($header, 'Content-Type:application/x-www-form-urlencoded;charset=utf-8');
		}
		//设置请求头
		curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
		//设置为false,只会获得响应的正文(true的话会连响应头一并获取到)
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 设置超时限制防止死循环
		//设置发起连接前的等待时间，如果设置为0，则无限等待。
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
		//将curl_exec()获取的信息以文件流的形式返回，而不是直接输出。
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		//上传文件相关设置
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算

		//3)设置提交方式
		switch ($type) {
		case "GET":
			curl_setopt($ch, CURLOPT_HTTPGET, true);
			break;
		case "POST":
			curl_setopt($ch, CURLOPT_POST, true);
			break;
		case "PUT": //使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请 求。这对于执行"DELETE" 或者其他更隐蔽的HTT
			curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
			break;
		case "DELETE":
			curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
			break;
		}

		//2)设备请求体
		if (count($body) > 0 && $type == 'POST') {
			$body = $json ? json_encode($body) : $body;
			curl_setopt($ch, CURLOPT_POSTFIELDS, $body); //全部数据使用HTTP协议中的"POST"操作来发送。
		}

		//3.抓取URL并把它传递给浏览器
		$res = curl_exec($ch);
		$result = json_decode($res, true);
		//4.关闭curl资源，并且释放系统资源
		curl_close($ch);
		if (empty($result)) {
			return $res;
		} else {
			return $result;
		}

	}
}